Executando protocolos SSL e não SSL na mesma porta com o NGINX 1.15.2

NGINX | 24 de julho de 2018

Hoje, temos o prazer de anunciar a disponibilidade do NGINX Open Source 1.15.2. Um dos principais recursos desta versão é a nova variável $ssl_preread_protocol, que permite distinguir entre SSL/TLS e outros protocolos ao encaminhar tráfego usando um proxy TCP (stream). Isso é útil se você quiser evitar restrições de firewall, por exemplo, executando serviços SSL/TLS e SSH na mesma porta.

O novo recurso também estará disponível para os clientes do NGINX Plus na próxima versão NGINX Plus R16.

Quando e como usar $ssl_preread_protocol

Quando você encerra e descriptografa o tráfego SSL/TLS usando os módulos http ou stream, a variável $ssl_protocol (http, stream) registra a versão do SSL ou TLS usada pelo cliente. No entanto, às vezes você pode querer simplesmente encaminhar o tráfego SSL/TLS sem descriptografá-lo, usando os módulos stream para implementar um proxy TCP básico ou um balanceador de carga.

O módulo stream_ssl_preread inspeciona a mensagem ClientHello inicial em uma conexão SSL ou TLS e extrai diversos valores que podem ser usados para gerenciar a conexão. A variável $ssl_preread_protocol, adicionada na versão 1.15.2, captura o número da versão mais recente do SSL/TLS no campo client_version da mensagem ClientHello. Se a extensão supported_versions estiver presente na mensagem ClientHello, a variável será definida como TLSv1.3.

Se uma conexão não usar uma versão de SSL ou TLS, a variável $ssl_preread_protocol ficará vazia, indicando que a conexão está usando um protocolo diferente de SSL/TLS, como SSH.

O trecho de configuração a seguir usa a variável $ssl_preread_protocol em um bloco map para definir a variável $upstream com o nome do grupo upstream apropriado para o protocolo usado na conexão. A diretiva proxy_pass encaminha então a solicitação para o grupo upstream selecionado. Observe que a diretiva ssl_preread on deve ser incluída no bloco server para que a variável $ssl_preread_protocol funcione.

stream {    upstream ssh {
        server 192.0.2.1:22;
    }

    upstream web {
        server 192.0.2.2:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
    }
}

Para que a configuração entre em vigor, os clientes precisam acessar o servidor SSH pela porta 443, em vez da porta padrão 22. Com o cliente SSH integrado ao macOS e ao Linux, por exemplo, você pode usar a opção -p para alterar a porta:

$ ssh ssh-server-ip-address -p 443

Como obter a versão mais recente do NGINX

A versão mais recente do NGINX está sempre disponível na ramificação mainline do nosso repositório oficial.

Saiba mais

O NGINX Open Source 1.15.2 contém melhorias adicionais e correções de bugs. Para conferir a lista completa de novidades, consulte o registro de alterações do NGINX.


Compartilhar

Sobre o autor

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.